package com.eastfair.enums;

import com.eastfair.annotation.base.BaseEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.util.stream.Stream;

/**
 * @ClassName MsgTempEnum
 * @Description TODO
 * @Author liuxiaobai
 * @Date 2021/8/5 11:56 上午
 * @Version 1.0
 */
@Getter
@AllArgsConstructor
@NoArgsConstructor
@ApiModel(value = "SwitchEnum", description = "开关枚举类")
public enum MsgTempEnum implements BaseEnum {
    /**
     * 预登记成功短信邮件模板
     * MsgFieldEnum:
     * VISITOR_NAME_CN,VISITOR_NAME_EN,VISITOR_CARD
     */
    PRE_REGISTRATION_APPROVE("预登记成功短信邮件模板"),
    /**
     * 意向订单下单通知模板
     * EXHIBITOR_EMPLOYEE_NAME_CN,EXHIBITOR_EMPLOYEE_NAME_EN,PRODUCT_NAME_CN,PRODUCT_NAME_EN
     * VISITOR_NAME_CN,VISITOR_NAME_EN,VISITOR_COMPANY_CN,VISITOR_COMPANY_EN
     */
    INTENTION_ORDER("意向订单下单通知模板"),
    /**
     * 在线会议-参会人拒绝参会通知
     * MEETING_SPONSOR_CN,MEETING_SPONSOR_EN,MEETING_PERSON_CN,MEETING_PERSON_EN,
     * MEETING_NAME_CN,MEETING_NAME_EN
     */
    MEETING_PERSON_NOTICE_ACCEPT_REFUSE("在线会议-参会人拒绝参会通知"),
    /**
     * 在线会议-参会人同意参会通知
     * MEETING_SPONSOR_CN,MEETING_SPONSOR_EN,MEETING_PERSON_CN,MEETING_PERSON_EN,
     * MEETING_NAME_CN,MEETING_NAME_EN
     */
    MEETING_PERSON_NOTICE_ACCEPT_AGREE("在线会议-参会人同意参会通知"),
    /**
     * 在线会议-参会人员审核不通过通知
     * MEETING_PERSON_CN,MEETING_PERSON_EN
     */
    MEETING_PERSON_NOTICE_DISAPPROVE("在线会议-参会人员审核不通过通知"),
    /**
     * 在线会议-参会人员审核通过通知
     * MEETING_PERSON_CN,MEETING_PERSON_EN
     */
    MEETING_PERSON_NOTICE_APPROVE("在线会议-参会人员审核通过通知"),
    /**
     * 在线会议-会议提醒通知
     * MEETING_NAME_CN,MEETING_NAME_EN
     */
    MEETING_NOTICE_REMINDER("在线会议-会议提醒通知"),
    /**
     * 在线会议-会议审核不通过通知
     * MEETING_SPONSOR_CN,MEETING_SPONSOR_EN
     */
    MEETING_NOTICE_DISAPPROVE("在线会议-会议审核不通过通知"),
    /**
     * 在线会议-会议审核通过通知
     * MEETING_SPONSOR_CN,MEETING_SPONSOR_EN
     */
    MEETING_NOTICE_APPROVE("在线会议-会议审核通过通知"),
    /**
     * 在线会议-创建会议通知
     * MEETING_SPONSOR_CN,MEETING_SPONSOR_EN,MEETING_NAME_CN,MEETING_NAME_EN
     */
    MEETING_NOTICE_CREATE("在线会议-创建会议通知"),
    /**
     * 团队预登记发送待审核邮件（双语）
     * VISITOR_NAME_CN,VISITOR_NAME_EN,PROXY_VISITOR_NAME_CN,PROXY_VISITOR_NAME_EN
     */
    APPLICATION_PENDING_EMAIL_REGISTER_TEAM_BILINGUAL("团队预登记发送待审核邮件（双语）"),
    /**
     * 团队预登记发送审核通过邮件
     * VISITOR_NAME_CN,VISITOR_NAME_EN,PROXY_VISITOR_NAME_CN,PROXY_VISITOR_NAME_EN
     */
    APPLICATION_APPROVE_EMAIL_REGISTER_TEAM("团队预登记发送审核通过邮件"),
    /**
     * 注册审核中模板
     */
    APPLICATION_PENDING_EMAIL("注册审核中模板"),
    /**
     * 注册成功邮件模板
     */
    APPLICATION_APPROVE_EMAIL("注册成功邮件模板"),
    /**
     * 找回密码邮件模板
     * PASSWORD_NEW
     */
    APPLICATION_EMAIL_PASSWORD("找回密码邮件模板"),
    /**
     * 验证码邮件模板
     * VALIDATE_CODE
     */
    APPLICATION_EMAIL("验证码邮件模板"),
    /**
     * 邮箱url注册模板
     * URL_REGISTER
     */
    APPLICATION_REGISTER_EMAIL("邮箱url注册模板"),
    /**
     * VIP审核中邮件
     * VISITOR_NAME_CN,VISITOR_NAME_EN,ACCOUNT
     */
    VIP_PENDING_EMAIL("VIP审核中邮件"),
    /**
     * VIP审核通过邮件
     * VISITOR_NAME_CN,VISITOR_NAME_EN,ACCOUNT
     */
    VIP_APPROVE_EMAIL("VIP审核通过邮件"),
    /**
     * VIP审核不通过邮件
     * VISITOR_NAME_CN,VISITOR_NAME_EN,ACCOUNT
     */
    VIP_DISAPPROVE_EMAIL("VIP审核不通过邮件"),
    /**
     * 直播开始提醒邮件模板
     * LIVE_NAME_CN,LIVE_NAME_EN,LIVE_START_TIME
     */
    LIVE_START_EMAIL("直播开始提醒邮件模板"),
    /**
     * 商贸对接-邀约提前30分钟观众收到的通知
     * EXHIBITOR_NAME_CN,EXHIBITOR_NAME_EN,
     * EXHIBITOR_EMPLOYEE_NAME_CN,EXHIBITOR_EMPLOYEE_NAME_EN
     */
    APPOINTMENT_VISITOR_TIP("商贸对接-邀约提前30分钟观众收到的通知"),
    /**
     * 商贸对接-邀约提前30分钟展商收到的通知
     * VISITOR_COMPANY_CN,VISITOR_COMPANY_EN,
     * VISITOR_NAME_CN,VISITOR_NAME_EN
     */
    APPOINTMENT_ACTOR_TIP("商贸对接-邀约提前30分钟展商收到的通知"),
    /**
     * 商贸对接-观众确认后展商收到的通知
     * EXHIBITOR_NAME_CN,EXHIBITOR_NAME_EN,
     * EXHIBITOR_EMPLOYEE_NAME_CN,EXHIBITOR_EMPLOYEE_NAME_EN
     */
    APPOINTMENT_ACTOR_APPROVE("商贸对接-观众确认后展商收到的通知"),
    /**
     * 商贸对接-观众发起后展商收到的通知
     * EXHIBITOR_EMPLOYEE_NAME_CN,EXHIBITOR_EMPLOYEE_NAME_EN,
     * VISITOR_NAME_CN,VISITOR_NAME_EN,
     * APPOINTMENT_TIME,
     * APPOINTMENT_PLACE_CN,APPOINTMENT_PLACE_EN,
     * MEETING_NAME_CN,MEETING_NAME_EN
     */
    APPOINTMENT_ACTOR_PENDING("商贸对接-观众发起后展商收到的通知"),
    /**
     * 商贸对接-展商确认后观众收到的通知
     * EXHIBITOR_NAME_CN,EXHIBITOR_NAME_EN,
     * EXHIBITOR_EMPLOYEE_NAME_CN,EXHIBITOR_EMPLOYEE_NAME_EN
     */
    APPOINTMENT_VISITOR_APPROVE("商贸对接-展商确认后观众收到的通知"),
    /**
     * 商贸对接-展商发起后观众收到的通知
     * VISITOR_NAME_CN,VISITOR_NAME_EN,
     * EXHIBITOR_NAME_CN,EXHIBITOR_NAME_EN,
     * EXHIBITOR_EMPLOYEE_NAME_CN,EXHIBITOR_EMPLOYEE_NAME_EN,
     * APPOINTMENT_TIME,
     * EXHIBITION_NAME_CN,EXHIBITION_NAME_EN,
     * APPOINTMENT_PLACE_CN,APPOINTMENT_PLACE_EN
     */
    APPOINTMENT_VISITOR_PENDING("商贸对接-展商发起后观众收到的通知"),
    /**
     * 初始化密码
     * PASSWORD_NEW
     */
    INITIAL_PASSWORD("初始化密码");

    @ApiModelProperty(value = "描述")
    private String desc;


    /**
     * 根据当前枚举的name匹配
     */
    public static MsgTempEnum match(String val, MsgTempEnum def) {
        return Stream.of(values()).parallel().filter(item -> item.name().equalsIgnoreCase(val)).findAny().orElse(def);
    }

    public static MsgTempEnum get(String val) {
        return match(val, null);
    }

    public boolean eq(MsgTempEnum val) {
        return val != null && eq(val.name());
    }

    @Override
    @ApiModelProperty(value = "编码", allowableValues = "", example = "")
    public String getCode() {
        return this.name();
    }

}
